package linkedList;
/**
 * 
 * @Title: CandyLinkedList.java 
 * @Package linkedlist 
 * @Description: 自定义一个链表
 * @author CandyWall   
 * @date 2020年12月19日 下午7:32:32 
 * @version V1.0
 */
public class CandyLinkedList_v1<E> {
	private class Node {
		public E e;
		public Node next;
		
		public Node(E e, Node next) {
			this.e = e;
			this.next = next;
		}
		
		public Node(E e) {
			this(e, null);
		}

		public Node() {
			this(null, null);
		}

		@Override
		public String toString() {
			return e.toString();
		}
	}
	
	private Node head, tail;
	private int size;
	
	public CandyLinkedList_v1() {
		head = tail = null;
		size = 0;
	}

	/**
	 * 获取链表中的元素的个数
	 * @return
	 */
	public int getSize() {
		return size;
	}
	
	/**
	 * 返回链表是否为空
	 * @return
	 */
	public boolean isEmpty() {
		return size == 0;
	}
	
	/**
	 * 在链表头添加元素e
	 */
	public void addFirst(E e) {
		head = new Node(e, head);
		size++;
	}
	
	/**
	 * 在链表尾添加元素e
	 * @param e
	 */
	public void addLast(E e) {
		tail.next = new Node(e);
		size++;
	}
	
	/**
	 * 在索引为index处插入元素e
	 * @param e
	 * @param index
	 */
	public void add(int index, E e) {
		if(index < 0 || index > size) {
			throw new IllegalArgumentException("index索引不合法");
		}
		//如果在链表头插入元素
		if(index == 0) {
			addFirst(e);
		} else {
			Node prev = head;
			
			for(int i = 0; i < index - 1; i++) {
				prev = prev.next;
			}
			
			prev.next = new Node(e, prev.next);
			size++;
		}
	}
}
